package com.legendframework.core.aop;

import java.lang.reflect.Method;

/**
 * Bean切面
 */
public interface Aspectj {

    /**
     * 函数执行前的通知
     * @param source 目标对象
     * @param method 方法
     * @param args 入参
     */
    void enhance(Object source, Method method, Object[] args);

    /**
     * 函数成功执行后的通知
     * @param source 目标对象
     * @param method 方法
     * @param args 入参
     * @param result 方法执行成功的实际返回值
     * @return 代替的返回值
     */
    Object postposition(Object source, Method method, Object[] args , Object result);

    /**
     * 程序执行发生异常后的处理器
     * @param source 目标对象
     * @param method 方法
     * @param args 入参
     * @param e 异常信息
     * @return 代替的返回值
     */
    Object exceptionHandle(Object source, Method method, Object[] args , Throwable e) throws Throwable;
}
